home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / l2tpd_overflow2.nasl < prev    next >
Text File  |  2005-01-14  |  2KB  |  69 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. #
  5.  
  6. if (description)
  7. {
  8.  script_id(13659);
  9.  script_bugtraq_id(10466);
  10.  script_cve_id("CAN-2004-0649");
  11.  if ( defined_func("script_xref") ) script_xref(name:"OSVDB", value:"6726");
  12.  
  13.  
  14.  script_version ("$Revision: 1.3 $");
  15.  script_name(english:"l2tpd < 0.69 overflow");
  16.  desc["english"] = "
  17. The remote host is running a version of l2tpd which is older or
  18. equal to 0.68. 
  19.  
  20. This version is vulnerable to a buffer overflow which might allow an attacker 
  21. to execute arbitrary commands on the remote host with super-user privileges.
  22.  
  23. Solution : upgrade to l2tpd 0.69 or newer
  24. Risk factor : High";
  25.  
  26.  script_description(english:desc["english"]);
  27.  script_summary(english:"Determines the version of the remote l2tpd");
  28.  script_category(ACT_GATHER_INFO);
  29.  script_family(english:"Gain root remotely");
  30.  script_copyright(english:"This script is Copyright (C) 2004 Tenable Network Security");
  31.  exit(0);
  32. }
  33.  
  34.  
  35. function find_firmware(rep)
  36. {
  37.  local_var i, firmware;
  38.  
  39.  for(i=12;i<strlen(rep);i++)
  40.  { 
  41.   len = ord(rep[i]) * 256 + ord(rep[i+1]);
  42.   if(ord(rep[i]) & 0x80)len -= 0x80 * 256;
  43.   if(ord(rep[i+5]) == 6)
  44.   {
  45.    firmware = ord(rep[i+6]) * 256 + ord(rep[i+7]);
  46.    return firmware;
  47.   }
  48.   else i += len - 1;
  49.  }
  50.  return NULL;
  51. }
  52.  
  53. req =  raw_string(0xC8, 2, 0, 20, 0, 0, 0, 0,0,0,0,0,0,8, 0,0,0,0,0,0);
  54.  
  55.          
  56. soc = open_sock_udp(1701);
  57. send(socket:soc, data:req);
  58. r = recv(socket:soc, length:1024);
  59. if(!r)exit(0);
  60. close(soc);
  61. if(("l2tpd" >< r) || ("Adtran" >< r))
  62. {
  63.  firmware = find_firmware(rep:r);
  64.  hi = firmware / 256;
  65.  lo = firmware % 256;
  66.  
  67.  if((hi == 0x06)  && (lo < 0x90))security_hole(port:1701, proto:"udp");
  68. }
  69.